<?php
// 忽略favicon等非HTML请求
if (isset($_SERVER['REQUEST_URI']) && preg_match('/\.(ico|png|jpg|css|js)$/i', $_SERVER['REQUEST_URI'])) {
    http_response_code(404);
    exit;
}

// 忽略来自临时HTML文件（iframe）的请求
$uri = $_SERVER['REQUEST_URI'] ?? '';
$referer = $_SERVER['HTTP_REFERER'] ?? '';

// 如果请求来自 temp/ 目录下的HTML文件，说明是iframe内部链接触发的，应该忽略
if (strpos($referer, '/temp/search_result_') !== false) {
    http_response_code(404);
    exit('Request from iframe ignored');
}

// 如果URI包含 /temp/，也忽略
if (strpos($uri, '/temp/') !== false && $uri !== '/') {
    http_response_code(404);
    exit('Temp file request ignored');
}

require_once __DIR__ . '/classes/KeywordManager.php';
require_once __DIR__ . '/classes/HtmlParser.php';
require_once __DIR__ . '/classes/Logger.php';

// 加载配置文件
$config = require __DIR__ . '/config/config.php';

$logger = new Logger($config);

// 生成唯一的页面加载ID
$pageLoadId = uniqid('page_', true);

$logger->info('=== 页面加载开始 ===', [
    'page_id' => $pageLoadId,
    'uri' => $_SERVER['REQUEST_URI'] ?? 'unknown',
    'method' => $_SERVER['REQUEST_METHOD'] ?? 'unknown',
    'user_agent' => substr($_SERVER['HTTP_USER_AGENT'] ?? 'unknown', 0, 100),
    'referer' => $_SERVER['HTTP_REFERER'] ?? 'none'
]);

$keywordManager = new KeywordManager($config);
$htmlParser = new HtmlParser($config);

// 页面加载时获取关键词并请求神马搜索
// 每个标签页都会获取独立的关键词（支持多标签并发）
$logger->info('获取初始关键词');
$currentKeyword = $keywordManager->getRandomUnreadKeyword();

if (!$currentKeyword) {
    $logger->warning('没有未读关键词，重置所有关键词');
    // 如果没有未读关键词，重置所有关键词
    $keywordManager->resetAllKeywords();
    $currentKeyword = $keywordManager->getRandomUnreadKeyword();
}

if (!$currentKeyword) {
    $logger->error('没有可用的关键词');
    $currentKeyword = '默认关键词';
}

$logger->info('初始关键词', ['page_id' => $pageLoadId, 'keyword' => $currentKeyword]);

// 构建神马搜索URL
$searchUrl = "https://wm.m.sm.cn/s?from=" . $config['search_source'] . "&q=" . urlencode($currentKeyword);

// 首次加载时请求神马搜索并获取HTML
// 一次请求，两个用途：1. 解析关联关键词  2. 显示给iframe
$logger->info('开始请求神马搜索（用于解析和显示）');
$searchHtml = null;
$iframeUrl = $searchUrl; // 默认使用原URL作为降级方案

try {
    // 获取HTML内容
    $searchHtml = $htmlParser->fetchHtml($searchUrl);
    
    if ($searchHtml) {
        $logger->info('成功获取搜索结果HTML', ['length' => strlen($searchHtml)]);
        
        // 解析关联关键词
        $relatedKeywords = $htmlParser->parseKeywords($searchHtml);
        
        if (!empty($relatedKeywords)) {
            $logger->info('保存关联关键词', ['count' => count($relatedKeywords)]);
            $keywordManager->insertRelatedKeywords($relatedKeywords);
            $logger->info('首次加载关联关键词保存成功');
        } else {
            $logger->warning('首次加载未找到关联关键词');
        }
        
        // 将HTML保存到临时文件供iframe使用
        $tempDir = __DIR__ . '/temp';
        if (!is_dir($tempDir)) {
            mkdir($tempDir, 0755, true);
        }
        
        $tempFile = $tempDir . '/search_result_' . md5($currentKeyword) . '.html';
        if (file_put_contents($tempFile, $searchHtml) !== false) {
            $iframeUrl = 'temp/search_result_' . md5($currentKeyword) . '.html';
            $logger->info('HTML已保存到临时文件', ['file' => $tempFile]);
        } else {
            $logger->warning('保存HTML到临时文件失败，iframe将直接使用原URL');
        }
    } else {
        $logger->error('获取搜索结果HTML失败，iframe将直接使用原URL');
    }
} catch (Exception $e) {
    $logger->error('首次加载处理失败', ['error' => $e->getMessage()]);
}

$logger->info('=== 页面加载完成 ===', ['page_id' => $pageLoadId]);
?>

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>搜索</title>
    <style>
        body {
            margin: 0;
            padding: 0;
        }
        
        .search-container {
            width: 100%;
            height: 100vh;
        }
        
        .search-iframe {
            width: 100%;
            height: 100%;
            border: none;
        }
        
        .loading {
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            font-size: 18px;
            color: #666;
        }
    </style>
</head>
<body>
    <div class="search-container">
        <div class="loading" id="loading">正在加载...</div>
        <iframe id="searchFrame" class="search-iframe" style="display: none;" src="<?php echo htmlspecialchars($iframeUrl); ?>"></iframe>
    </div>

    <script>
        let countdown = <?php echo $config['switch_interval']; ?>;
        let isSwitching = false; // 防止重复切换的标志
        
        // 切换到下一个关键词
        function switchToNextKeyword() {
            // 如果正在切换，忽略本次调用
            if (isSwitching) {
                console.log('正在切换中，忽略重复请求');
                return;
            }
            
            isSwitching = true;
            console.log('开始切换关键词...');
            
            fetch('api/next_keyword.php', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                }
            })
            .then(response => response.json())
            .then(data => {
                if (data.success) {
                    // 更新iframe
                    document.getElementById('searchFrame').src = data.searchUrl;
                    
                    // 重新开始倒计时
                    countdown = <?php echo $config['switch_interval']; ?>;
                    
                    console.log('切换成功:', data);
                } else {
                    console.error('切换失败:', data.message);
                }
            })
            .catch(error => {
                console.error('切换关键词失败:', error);
            })
            .finally(() => {
                // 重置标志，允许下次切换
                isSwitching = false;
            });
        }
        
        // 倒计时自动切换
        setInterval(function() {
            if (countdown > 0) {
                countdown--;
            }
            
            // 倒计时到0时触发切换
            if (countdown === 0 && !isSwitching) {
                switchToNextKeyword();
            }
        }, 1000);
        
        // iframe加载完成事件
        document.getElementById('searchFrame').addEventListener('load', function() {
            if (this.src) {
                document.getElementById('loading').style.display = 'none';
                document.getElementById('searchFrame').style.display = 'block';
            }
        });
    </script>
</body>
</html>
